const { User } = require('../models/index')
const { pick } = require('../util/util')

//通过id获取用户
function getUser(params) {
    return new Promise((resolve, reject) => {
        const { user_id } = params
        User.findOne({
            raw: true,
            where: pick({ user_id })
        }).then(data => {
            resolve(data)
        }).catch(err => {
            reject(`查询用户失败：${err.message}`)
            logError(`查询用户失败：${err.message}`)
        })
    })
}

//验证账号密码，并登录
function verifyUser(params) {
    return new Promise((resolve, reject) => {
        const { account, password } = params
        User.findOne({
            raw: true,
            where: pick({ account, password })
        }).then(data => {
            if (data) {
                User.update({ status: 0 }, { where: pick({ account, password }) })
            }
            resolve(data)
        }).catch(err => {
            reject(`验证用户失败：${err.message}`)
            logError(`验证用户失败：${err.message}`)
        })


    })
}


// 添加用户
function addUser(params) {
    return new Promise((resolve, reject) => {
        const { account, password, name, stu_num } = params;

        // 检查是否已经存在相同账号的用户
        User.findOne({
            raw: true,
            where: { account }
        }).then(existingAccount => {
            if (existingAccount) {
                reject('该账号已存在');
                return;
            }

            // 检查是否存在对应的学生
            User.findOne({
                raw: true,
                where: { stu_num, name }
            }).then(existingTeacher => {
                if (!existingTeacher) {
                    reject('不存在对应学生');
                    return;
                }
                if (existingTeacher.account) {
                    reject('改学生已注册账号')
                    return
                }
                User.update(
                    { account, password, status: 1 },
                    { where: { stu_num, name } }
                ).then(([affectedRows]) => {
                    if (affectedRows === 0) {
                        reject('更新失败：没有记录被更新');
                    } else {
                        resolve('用户信息更新成功');
                    }
                }).catch(err => {
                    reject(`更新失败：${err.message}`);
                    logError(`更新失败：${err.message}`);
                });
            }).catch(err => {
                reject(`查询学生失败：${err.message}`);
                logError(`查询学生失败：${err.message}`);
            });
        }).catch(err => {
            reject(`查询账号失败：${err.message}`);
            logError(`查询账号失败：${err.message}`);
        });
    })
}

//更改用户密码
function changePassword(params) {
    return new Promise((resolve, reject) => {
        const { user_id, password } = params

        User.update({ password }, { where: pick({ user_id }) }).then(([affectedRows]) => {
            if (affectedRows === 0) {
                reject('更新失败：没有记录被更新');
            } else {
                resolve('密码更新成功');
            }
        }).catch(err => {
            reject(`更新失败：${err.message}`);
            logError(`更新失败：${err.message}`);
        })
    })
}

//更改用户登录状态
function changeStatus(params) {
    return new Promise((resolve, reject) => {
        const { user_id } = params
        User.findOne({
            raw: true,
            where: pick({ user_id })
        }).then(data => {
            if (!data) {
                reject('查询失败: 无此用户');
            }
            if (data.status === 0) {
                User.update({ status: 1 }, { where: pick({ user_id }) }).then(([affectedRows]) => {
                    if (affectedRows === 0) {
                        reject('更新失败：没有记录被更新');
                    } else {
                        resolve('状态更新成功');
                    }
                }).catch(err => {
                    reject(`更新失败：${err.message}`);
                    logError(`更新失败：${err.message}`);
                })
            } else {
                reject('用户已下线');
            }
        })
    })
}

// 修改用户信息
function editUser(params) {
    return new Promise((resolve, reject) => {
        const { user_id, name, avatar, sex, faculty, introduction, status } = params;
        // 通过User_id获取用户信息
        getUser({ user_id })
            .then(existingAdmin => {
                // 更新用户信息
                User.update(
                    { name, avatar, sex, faculty, introduction, status },
                    { where: { user_id } }
                ).then(([affectedRows]) => {
                    if (affectedRows === 0) {
                        reject('更新失败：没有记录被更新')
                    } else {
                        // 返回信息
                        resolve(params);
                    }
                }).catch(err => {
                    reject(`更新失败：${err.message}`)
                    logError(`更新失败：${err.message}`)
                })
            })
            .catch(err => {
                reject(`查询用户失败：${err.message}`);
                logError(`查询用户失败：${err.message}`);
            });
    });
}

module.exports = {
    getUser, addUser, verifyUser, changePassword, changeStatus, editUser
}